#include "smart_home_camera.h"

Smart_Home_Camera::Smart_Home_Camera(QWidget *parent) : QWidget(parent)
{
  
    // 创建摄像头对象，参数为父部件（当前 CameraWidget 实例）
    camera = new QCamera(this); 
    // 创建摄像头取景器对象，用于显示摄像头画面，父部件为当前 CameraWidget 实例
    viewfinder = new QCameraViewfinder(this); 
    // 创建图像捕捉对象，关联到摄像头，用于后续可能的拍照等操作
    imageCapture = new QCameraImageCapture(camera); 
    
    // 将摄像头的视频输出设置到取景器，这样取景器就能显示摄像头画面
     camera->setViewfinder(viewfinder); 
    // 初始状态下停止摄像头
     
     
     clickLabel = new QLabel();
     QVBoxLayout *layout = new QVBoxLayout(this);
     layout->addWidget(viewfinder);
     layout->addWidget(clickLabel);
     setLayout(layout);
     
     clickLabel->setPixmap(QPixmap(":/img/camera_home.jpg"));
     clickLabel->setFixedSize(222, 200);
     clickLabel->setScaledContents(true);
     
    camera->stop(); 
    // 初始隐藏取景器，因为摄像头未启动时不需要显示画面
    viewfinder->setVisible(false); 

}

void Smart_Home_Camera::mouseDoubleClickEvent(QMouseEvent *event)
{
    // 检查双击事件的位置是否在 clickLabel 的几何区域内
        if (clickLabel->geometry().contains(event->pos())) { 
            // 调用槽函数，切换摄像头的启动/停止状态
            toggleCamera(); 
        }
}
// 槽函数实现，用于启动或停止摄像头
inline void Smart_Home_Camera::toggleCamera()
{
    // 判断摄像头当前状态，如果是活动状态（已启动）
    if (camera->state() == QCamera::ActiveState) { 
        // 停止摄像头
        camera->stop(); 
        // 隐藏取景器，因为摄像头已停止，无需显示画面
        viewfinder->setVisible(false); 
    } else {
        // 启动摄像头
        camera->start(); 
        // 显示取景器，用于展示摄像头实时画面
        viewfinder->setVisible(true); 
    }
}
